// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('[createOrder] 开始处理订单创建请求:', event);

  const wxContext = cloud.getWXContext();
  const openid = wxContext.OPENID;

  if (!openid) {
    console.error('[createOrder] 无法获取用户openid');
    return {
      success: false,
      error: '无法获取用户身份信息'
    };
  }

  console.log('[createOrder] 用户ID:', openid);

  try {
    // 检查必要的订单数据
    if (!event.orderItems || !Array.isArray(event.orderItems) || event.orderItems.length === 0) {
      console.error('[createOrder] 订单商品列表为空');
      return {
        success: false,
        error: '订单商品列表不能为空'
      };
    }

    // 准备订单数据
    const orderData = {
      openid,
      orderItems: event.orderItems,
      deliveryType: event.deliveryType || 'self',
      addressInfo: event.addressInfo,
      shopInfo: event.shopInfo,
      pickupTime: event.pickupTime || '尽快送达',
      productAmount: parseFloat(event.productAmount) || 0,
      deliveryFee: parseFloat(event.deliveryFee) || 0,
      totalAmount: parseFloat(event.totalAmount) || 0,
      paymentMethod: event.paymentMethod || 'wxpay',
      remark: event.remark || '',
      orderTime: db.serverDate(),
      status: 'pending', // 初始状态为待付款
      orderId: 'OD' + Date.now() + Math.floor(Math.random() * 1000) // 生成订单ID
    }

    console.log('[createOrder] 准备创建订单:', orderData.orderId);

    // 创建订单
    const orderRes = await db.collection('orders').add({
      data: orderData
    });

    console.log('[createOrder] 订单创建成功, _id:', orderRes._id);

    // 如果是余额支付，直接处理支付
    if (event.paymentMethod === 'balance') {
      console.log('[createOrder] 使用余额支付, 检查余额');

      // 查询用户余额
      const userRes = await db.collection('users').where({
        openid: openid
      }).get();

      // 检查余额是否足够
      if (userRes.data.length > 0 && userRes.data[0].balance >= event.totalAmount) {
        console.log('[createOrder] 余额足够, 执行扣款');

        // 更新用户余额
        await db.collection('users').doc(userRes.data[0]._id).update({
          data: {
            balance: userRes.data[0].balance - event.totalAmount
          }
        });

        // 更新订单状态为已支付
        await db.collection('orders').doc(orderRes._id).update({
          data: {
            status: 'paid',
            payTime: db.serverDate()
          }
        });

        console.log('[createOrder] 余额支付成功');

        return {
          success: true,
          orderId: orderData.orderId,
          _id: orderRes._id,
          message: '订单创建成功并已支付',
          isPaid: true
        };
      } else {
        console.error('[createOrder] 余额不足或用户记录不存在');
      }
    }

    console.log('[createOrder] 订单创建完成, 等待支付');

    return {
      success: true,
      orderId: orderData.orderId,
      _id: orderRes._id,
      message: '订单创建成功',
      isPaid: false
    };
  } catch (error) {
    console.error('[createOrder] 处理订单异常:', error);
    return {
      success: false,
      error: error.message || '订单创建失败'
    };
  }
} 